<?php

/**
 * Description of x10_TraceInfoManager_InfoProvider
 *
 * @author prometheus
 */
class x10_TraceInfoManager_InfoProvider extends x10_Provider
{
	public $xName = 'Követési információ';

	public $castedName = '';

	public $logs = array();

	public $recordLimit = 150;

	/**
	 * Konstruktor.
	 * @param x10_Config $config Array típusban nyers beállításokat vár
	 * asszociatív tömbben, String típusban érvényes JSON fájl elérési útját
	 * @throws E_Provider_ConfigNotExists
	 * @throws E_Provider_ConfigParseError
	 */
	public function __construct(x10_Config $config)
	{
		parent::__construct($config);
		$this->castedName = $this->config->getConfigKey('methodName');
		$logs = $this->config->getConfigKey('logs');
		if (isset($logs)) $this->logs = $logs;
		$rl = $this->config->getConfigKey('recordLimit');
		if (isset($rl)) $this->recordLimit = $rl;
	}

	public function log(x10_TraceInfoManager_Information $info)
	{
		$this->logs[] = $info;
	}

	public function get()
	{
		return $this->logs;
	}

	protected function pruneRecordsToLimit()
	{
		while (count($this->logs) > $this->recordLimit)
		{
			array_shift($this->logs);
		}
	}

	public function __toString()
	{
		// Régi rekordok törlése a log-ból a megadott limitig.
		$this->pruneRecordsToLimit();

		// Némileg olvasható JSON-t kell előállítani.
		$result = '['."\n";
		foreach ($this->logs as $info)
		{
			$result .= '	'.json_encode((($info instanceof x10_TraceInfoManager_Information)? $info->get() : $info)).','."\n";
		}
		$eos = new x10_TraceInfoManager_Information('==== Nyomkövetési munkafolyamat vége ====');
		$result .= '	'.json_encode($eos->get())."\n";
		$result .= ']';

		return $result;
	}
}

?>